package com.itheima;

import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.xml.sax.ext.Attributes2;

import javax.naming.Name;
import java.util.zip.CRC32;

/**
 * @ProjectName: ybxy6
 * @Titile: TestLambda
 * @Author: 鲁伍加
 * @Description: TODO
 */
public class TestLambda {
    public static void main(String[] args) {
        testD();
    }

    public static void testD(){
        D d1 = new D() {
            @Override
            public int max(int a, int b) {

                return Math.max(a,b);
            }
        };
        D d2 = (a,b) -> a > b ? a : b;
        D d3 = Math::max;
        int max = d3.max(1,2);
        System.out.println(max);
    }
    public static void testC() {

    C c1 = new C() {
        @Override
        public String show(String name) {

            return "name = " + name;
        }
    };
    //2.创建C接口的lambda表达式对象
    C c2 = name -> "name = " + name;
    //3.创建C接口的方法引用
    C c3 = TestLambda::show4;
        String result = c3.show("彰显波");
        System.out.println(result);
    }

public static String show4(String name) {
    return "name = " + name;
}
    public static void testB(){
        B b1 = new B() {
            @Override
            public void show(String name) {

                System.out.println(name);
            }
        };
        //创建B接口的lambda表达式对象
        B b2  = name ->System.out.println(name);

        //创建B接口的方法引用对象
        B b3  = System.out::println;
        b3.show("李明同学");

    }

    public static void testA(){
        //1.创建一个接口A的匿名内部类
        A a1 = new A() {
            @Override
            public void show(String name, int age) {

                System.out.println(name + "," + age);
            }
        };
        //2.将匿名内部类替换成lambda表达式
        A a2 = (name, age) -> System.out.println(name + "," + age);
        a2.show("张三", 18);
        //3.将lambda表达式替换成方法引用（静态方法）
        A a3 = TestLambda::show2;
        a3.show("李四", 20);
        //4.将lambda表达式替换成方法引用(成员方法）
        TestLambda testLambda = new TestLambda();
        A a4 = testLambda::show3;
        a4.show("王五", 35);

    }

    //定义一个成员方法，故意让返回值和形参接口中方法一致
    public static void show2(String name, int age){
        System.out.println("show2:"+name + "," + age);
    }
    public void show3(String name, int age){
        System.out.println("show2:"+name + "," + age);
    }
}
